package com.rong.juc_test.juc_base.threadpool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 演示线程池的三种常用分类
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //一： 一池5线程
//        ExecutorService pool1 = Executors.newFixedThreadPool(5); // 银行的5个窗口
//
//        try {
//            // 10个客户 请求
//            for (int i = 0; i < 10; i++) {
//                // 执行
//                pool1.execute(() ->{
//                    System.out.println(Thread.currentThread().getName() + " 办理业务");
//                });
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//        }finally {
//            // 关闭 将线程放回线程池
//            pool1.shutdown();
//        }

//        // 二：一池一线程
//        ExecutorService pool2 = Executors.newSingleThreadExecutor();
//        try {
//            // 10个客户 请求
//            for (int i = 0; i < 10; i++) {
//                // 执行
//                pool2.execute(() ->{
//                    System.out.println(Thread.currentThread().getName() + " 办理业务");
//                });
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//        }finally {
//            // 关闭 将线程放回线程池
//            pool2.shutdown();
//        }
//

        // 三：一池可扩容
        ExecutorService pool3 = Executors.newCachedThreadPool();
        try {
            // 10个客户 请求
            for (int i = 0; i < 20; i++) {
                // 执行
                pool3.execute(() ->{
                    System.out.println(Thread.currentThread().getName() + " 办理业务");
                });
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 关闭 将线程放回线程池
            pool3.shutdown();
        }



    }
}
